一、问题场景
在 CentOS7 系统中使用 YUM 安装 MySQL8.0 社区版 时,出现大量文件冲突报错,安装中断,核心报错为 Transaction check error。
报错核心特征:MySQL8.0 安装包的 /usr/bin/mysql、/etc/my.cnf、系统服务文件、工具命令、帮助文档等全部文件,与服务器已存在的 Percona-Server-5.6 文件冲突。
简单说明:Percona 是 MySQL 的衍生开源分支,文件结构、命令、配置路径与官方 MySQL 完全一致,同一服务器无法同时共存,只能二选一。
Percona 占用了 MySQL 全系核心资源:
- 客户端命令:mysql、mysqldump、mysqladmin、mysqlbinlog 等
- 核心配置文件:/etc/my.cnf
- 系统服务文件:mysqld.service
- 数据库插件、二进制程序、man帮助文档等
因此官方 MySQL8.0 安装包无法覆盖、替换已有文件,触发事务校验失败,安装终止。
三、解决方案(两种可选,生产环境推荐方案一)
方案一:卸载Percona5.6,纯净安装MySQL8.0(推荐)
适用于:需要统一使用官方 MySQL8.0、无需保留 Percona 环境、需要升级数据库版本的场景。
1. 停止现有数据库服务
先关闭运行中的数据库服务,避免文件占用:
systemctl stop mysqld
systemctl stop mysql
2. 查看所有Percona安装包
rpm -qa | grep Percona-Server
3. 完整卸载Percona全系依赖
精准卸载核心包:
yum remove -y Percona-Server-server-56 Percona-Server-client-56 Percona-Server-shared-56 Percona-Server-devel-56
若存在残留包,一键批量卸载所有Percona相关包:
yum remove -y $(rpm -qa | grep Percona-Server)
4. 【重要】备份原有数据
YUM 卸载仅删除程序包,不会删除业务数据,迁移/重装前务必备份,防止数据丢失:
cp -r /var/lib/mysql /var/lib/mysql_percona56_bak
5. 清理旧配置文件
删除Percona残留的配置文件,避免新MySQL配置冲突:
rm -f /etc/my.cnf
6. 清理缓存并重新安装MySQL8.0
yum clean all
yum install -y mysql-community-server
方案二:放弃官方MySQL,沿用Percona数据库
适用于:服务器业务稳定,不想重装数据库、不想迁移数据的场景。
Percona-Server 完全兼容原生 MySQL,日常使用的 mysql 连接、mysqldump 备份、日志解析等命令全部通用,无需额外安装官方 MySQL 包。
若需要升级版本,可直接将 Percona5.6 升级为 Percona8.0,兼容性、稳定性更适配现有环境。
四、高危操作禁止(避坑重点)
严禁使用强制覆盖安装,很多新手会用 --force、--nodeps 强制安装,后果极其严重:
# 禁止执行!高危命令
yum install mysql-community-server --force
rpm -ivh xxx.rpm --force --nodeps
强制覆盖会导致 Percona 和 MySQL 文件混杂、依赖错乱,最终数据库无法启动、服务崩溃,且难以修复。
五、MySQL8.0 初始化完整步骤
卸载冲突软件、安装完成后,执行以下命令初始化数据库:
1. 启动MySQL服务
systemctl start mysqld
systemctl enable mysqld
2. 获取初始临时密码
grep 'temporary password' /var/log/mysqld.log
3. 登录并修改root密码
mysql -uroot -p
登录后执行密码修改语句(适配MySQL8.0密码规则),即可正常使用数据库。
六、总结
- MySQL 官方版与 Percona 分支不支持共存,文件冲突是正常机制,并非安装故障;
- 需要原生MySQL8.0则彻底卸载Percona,需要保业务稳定则沿用Percona;
- 坚决杜绝强制覆盖安装,避免数据库环境彻底损坏;
- 重装前务必备份
/var/lib/mysql数据目录,保障数据安全。